﻿#include<iostream>
using namespace std;

//class Stack
//{
//public:
//	void Push(int x)
//	{
//		//...
//	}
//	void Top()
//	{
//		//...
//	}
//private:
//	int* a;
//	int top;
//	int capacity;
//};
//
//class Stack
//{
//	void Push(int x)
//	{
//		//...
//	}
//public:
//	void Top()
//	{
//		//...
//	}
//private:
//	int* a;
//	int top;
//	int capacity;
//};
//
//class Data
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//class Data
//{
//public:
//	void Init(int year, int month, int day);
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//void Data::Init(int year, int month, int day)
//{
//	_year = year;
//	_month = month;
//	_day = day;
//}
//
//int main()
//{
//	Data d1;
//	return 0;
//}

//class Data
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Data d1;
//	Data d2;
//	d1.Init(2024, 8, 7);
//	d1.Print();
//
//	d2.Init(2024, 1, 23);
//	d2.Print();
//	return 0;
//}

//class A
//{
//public:
//	void print()
//	{
//		cout << _c << endl;
//	}
//private:
//	char _c;
//	int _a;
//};
//
//int main()
//{
//	A a;
//	cout << sizeof(a) << endl;
//}

//class B
//{
//	
//};
//
//int main()
//{
//	B b;
//	cout << sizeof(b) << endl;
//	return 0;
//}

//class Data
//{
//public:
//	//void Init(Data* const this,int year, int month, int day)
//	void Init(int year, int month, int day)
//	{
//		this->_year = year;
//		this->_month = month;
//		this->_day = day;
//	}
//	
//	//void Print(Data* const this)
//	void Print()
//	{
//		cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Data d1;
//	Data d2;
//
//	//d1.Init(&d1,2024, 8, 7);
//	d1.Init(2024, 8, 7);
//	//d1.Print(&d1);
//	d1.Print();
//
//	d2.Init(2024, 1, 23);
//	d2.Print();
//	return 0;
//}

//class Data
//{
//public:
//	//无参默认构造
//	/*Data()
//	{
//		_year = 1;
//		_month = 2;
//		_day = 3;
//	}*/
//	//带参构造函数
//	/*Data(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}*/
//
//	//缺省默认构造
//	Data(int year = 1, int month = 2, int day = 3)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	
//	void print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	//Data d1;
//	//d1.print();
//	//Data d2(2024, 8, 8);
//	//d2.print();
//	Data d3;
//	d3.print();
//	Data d4(2024, 1);
//	d4.print();
//	return 0;
//}
//
//typedef int STDataType;
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认生成MyQueue的构造函数调⽤了Stack的构造，完成了两个成员的初始化
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	MyQueue mq;
//	return 0;
//}


//typedef int STDataType;
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//	~Stack()
//	{
//		free(_a);
//		_a = nullptr;
//		_capacity = _top = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认生成MyQueue的析构函数调⽤了Stack的构造，完成了两个成员的资源清理
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	MyQueue mq;
//	return 0;
//}

//class Data
//{
//public:
//	Data(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	Data(const Data& d)
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//	
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//void func1(Data d)
//{
//	cout << &d << endl;
//	d.Print();
//}
//int main()
//{
//	Data d1(2024,8,10);
//	d1.Print();
//	Data d2(d1);
//	/*Data d2 = d1;
//	d2.Print();*/
//	//func1(d1);
//	return 0;
//}

//
//typedef int STDataType;
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//	
//	Stack(const Stack& st)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
//		if (nullptr == st._a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		memcpy(_a, st._a, sizeof(STDataType) * st._top);
//		_top = st._top;
//		_capacity = st._capacity;
//	}
//	void Push(STDataType x)
//	{
//		if (_top == _capacity)
//		{
//			int newcapacity = _capacity * 2;
//			STDataType* tmp = (STDataType*)realloc(_a, newcapacity *
//				sizeof(STDataType));
//			if (tmp == NULL)
//			{
//				perror("realloc fail");
//				return;
//			}
//			_a = tmp;
//			_capacity = newcapacity;
//		}
//		_a[_top++] = x;
//	}
//	~Stack()
//	{
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//
//};
//Stack& func1()
//{
//	Stack st;
//	return st;
//}
//
//int main()
//{
//	Stack ret = func1();
//	return 0;
//}
//int main()
//{
//	Stack st1;
//	st1.Push(1);
//	st1.Push(2);
//	Stack st2 = st1;
//	
//	return 0;
//}

//
//Stack func1(Stack& st)
//{
//	st.Push(1);
//	return st;
//}
//
//int main()
//{
//	Stack st1;
//	func1(st1);
//	return 0;
//}
//
//class Data
//{
//public:
//	//构造函数
//	Data(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	//拷贝构造
//	Data(const Data& d)
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//
//	bool operator==(const Data& d2)
//	{
//		return _year == d2._year
//			&& _month == d2._month
//			&& _day == d2._day;
//	}
//
//	Data& operator=(const Data& d)
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//		return *this;
//	}
//	
//	//前置++
//	Data& operator++()
//	{
//		cout << "前置++" << endl;
//		return *this;
//	}
//	//后置++
//	Data& operator++(int)
//	{
//		Data aa;
//		cout << "后置++" << endl;
//		return aa;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
////bool operator==(const Data& d1, const Data& d2)
////{
////	return d1._year == d2._year
////		&& d1._month == d2._month
////		&& d1._day == d2._day;
////}
//
//
//int main()
//{
//	Data d1(2024, 8, 10);
//	Data d2(2024, 8, 11);
//
//	/*d1 == d2;
//	d1.Print();*/
//	Data d3 = d2;
//	d3 = d1 = d2;
//	d1.Print();
//	d2.Print();
//	d3.Print();
//	return 0;
//}

//class A
//{
//public:
//	A(int a = 1, int b = 1, int c = 1, int d = 1)
//		:_a(3)
//		,_b(b)
//		,_c(c+1)
//		,_d(5)
//	{
//		_a = a;
//	}
//	void Print()
//	{
//		cout << _a << " " << _b << " " << _c << " " << _d << endl;
//	}
//	
//private:
//	int _a;
//	int _b;
//	int _c;
//
//	const int _d;
//};
//int main()
//{
//	A a1, a2(7,5,3);
//	//a1.Print();
//	a2.Print();
//	return 0;
//}

//class B
//{
//public:
//	B(int x)
//		:_h(x)
//	{
//		cout << "class B" << endl;
//	}
//private:
//	int _h;
//};
//class A
//{
//public:
//	A(int& x)
//		:_a(3)
//		,_b(x)
//		,_x(4)
//	{}
//	void Print()
//	{
//		cout << _a << endl;
//	}
//
//private:
//	const int _a;
//	int& _b;
//	B _x;
//};
//int main()
//{
//	return 0;
//}

//
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//		:_month(8)
//	{}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year = 2024;
//	int _month = 7;
//	int _day = 13;
//};
//
//int main()
//{
//	Date d1;
//	d1.Print();
//	return 0;
//}

//class A
//{
//public:
//	A(int a1)
//		:_a1(a1)
//	{}
//	A(int a1, int a2)
//		:_a1(a1)
//		, _a2(a2)
//	{}
//	void Print()
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//
//int main()
//{
//	A aa1 = 1;
//	aa1.Print();
//
//	const A& aa2 = 3;
//
//	A aa3 = { 2,4 };
//	aa3.Print();
//	return 0;
//}


//class A
//{
//public:
//	A()
//	{
//		++_a;
//	}
//	
//	A(const A& x)
//	{
//		++_a;
//	}
//
//	~A()
//	{
//		--_a;
//	}
//
//	static int Getcount()
//	{
//		return _a;
//	}
//
//private:
//	static int _a;
//};
//
//int A::_a = 0;
//
//int main()
//{
//	//cout << A::_a << endl;
//	cout << A::Getcount() << endl;
//	A a1, a2, a3;
//	cout << a3.Getcount() << endl;
//	{
//		A a4 = a3;
//		cout << A::Getcount() << endl;
//	}
//	cout << A::Getcount() << endl;
//	return 0;
//}

//class B;
//class A
//{
//public:
//	friend void f(const A& a, const B& b);
//private:
//	int _a1 = 5;
//	int _a2 = 4;
//};
//class B
//{
//public:
//	friend void f(const A& a, const B& b);
//private:
//	int _b1 = 1;
//	int _b2 = 3;
//};
//
//void f(const A& a, const B& b)
//{
//	cout << a._a1 << endl;
//	cout << b._b1 << endl;
//}
//
//int main()
//{
//	A a;
//	B b;
//	f(a, b);
//	return 0;
//}


//class A
//{
//public:
//	friend class B;
//private:
//	int _a1 = 5;
//	int _a2 = 4;
//};
//class B
//{
//public:
//	void f1(const A& a)
//	{
//		cout << a._a1 << endl;
//		cout << _b1 << endl;
//	}
//	
//	void f2(const A& a)
//	{
//		cout << a._a2 << endl;
//		cout << _b2 << endl;
//	}
//private:
//	int _b1 = 1;
//	int _b2 = 3;
//};
//
//int main()
//{
//	A a1;
//	B b1;
//	b1.f1(a1);
//	b1.f2(a1);
//	return 0;
//}

//class A
//{
//public:
//	class B
//	{
//	public:
//		void f1(const A& a)
//		{
//			cout << a._a << endl;
//			cout << _b << endl;
//		}
//
//	};
//private:
//	int _a = 5;
//	static int _b;
//};
//
//int A::_b = 1;
//
//int main()
//{
//	A::B b;
//	A a1;
//	b.f1(a1);
//	return 0;
//}

//class A
//{
//public:
//	A(int a = 1)
//		:_a(5)
//	{
//
//	}
//private:
//	int _a = 10;
//};
//
//class Solution
//{
//public:
//	int ret_Solution(int x)
//	{
//		return x;
//	}
//};
//
//int main()
//{
//	//有名对象
//	A a1;
//
//	//匿名对象
//	A(5);
//
//	//有名对象实现
//	Solution S1 ;
//	cout << S1.ret_Solution(10) << endl;
//	
//	//匿名对象实现
//	cout << Solution().ret_Solution(10) << endl;
//}

class A
{
private:
	int _a = 1;
public:
	A(int a = 1)
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}
	A(const A& a)
		:_a(a._a)
	{
		cout << "A(const A& a)" << endl;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
	A& operator++()
	{
		++_a;
		return *this;
	}
	void print()
	{
		cout << "print->" << _a << endl;
	}
	A& operator=(const A& a)
	{
		cout << "operator=()" << endl;
		return *this;
	}
};
void func1(A a)
{

}
A func2()
{
	A a1;
	return a1;
}


//int main()
//{
//	/*A a1;
//	func1(a1);
//	cout << endl;*/
//
//	
//	return 0;
//}

//int main()
//{
//	func1(A(1));
//	cout << endl;
//
//	func1(1);
//	cout << endl;
//	return 0;
//}

//int main()
//{
//	func2();
//	return 0;
//}
//
//int main()
//{
//	func2().print();
//	return 0;
//}

//int main()
//{
//	A ret = func2();
//	ret.print();
//	return 0;
//}

int main()
{
	A ret;
	ret = func2();
	ret.print();
	return 0;
}
